package gestores;

import java.util.LinkedList;
import java.util.List;

import persistence.IClubInversionDAO;
import persistence.IUsuarioDAO;
import persistence.JBDCClubInversionesDAO;
import persistence.JDBCUsuarioDAO;
import domain.ClubInversion;
import domain.Usuario;

public class GestorClubesInversion {
	public List<ClubInversion> selectAllClubes() {
		return (new JBDCClubInversionesDAO()).selectAllClubes();
	}

	public void insertarNuevoClubInversion(String login, String nombre_ci,
			String imagen, String descripcion) {

		GestorUsuario gu = new GestorUsuario();
		Usuario u = gu.selectUsuarioByLogin(login);
		Integer fama = 0;
		Integer ranking = 0;

		ClubInversion ci = new ClubInversion(u, nombre_ci, fama, ranking,
				imagen, descripcion, new LinkedList<Usuario>());
		IClubInversionDAO ici = new JBDCClubInversionesDAO();
		ici.insertClubInversores(ci);
	}

	public boolean insertarNuevoSocio(String nombre_ci, String socioClub,
			String login_compNuevo) {

		boolean res = false;

		GestorUsuario g = new GestorUsuario();

		if (g.esFundador(socioClub)) {
			// TODO Comprobar que el login_comNuevo no tiene club
			IClubInversionDAO ici = new JBDCClubInversionesDAO();
			List<Usuario> componentesCI = ici
					.getComponentsByNameClub(nombre_ci);
			Integer tamanoCI = componentesCI.size();
			Usuario comp = new Usuario();
			if (tamanoCI < 5) {
				int i = 0;
				while (res == false) {
					if (i != tamanoCI) {
						comp = componentesCI.get(i);
					}
					if (comp.getClubInversion() == null) {
						ici.updateCIComponent(nombre_ci, login_compNuevo, i);
						res = true;
						break;
					}
					comp = new Usuario();
					i++;

				}
			}

		}

		return res;
	}

	// Si un usuario del CI que no es fundador intenta enviar una peticion a
	// otro usuario el error es:
	// Cannot add or update a child row: a foreign key constraint fails
	// (`inverside`.`peticiones_ci`, CONSTRAINT `FK_peticiones_ci_3` FOREIGN KEY
	// (`emisor`) REFERENCES `clubes_inversion` (`id_componente1`))
	public boolean enviarPeticion(String loginEmisor, String loginReceptor) {

		IClubInversionDAO ici = new JBDCClubInversionesDAO();
		boolean result = false;
		if (!ici.existePeticion(loginEmisor, loginReceptor)) {
			IUsuarioDAO iu = new JDBCUsuarioDAO();
			Usuario emisor = iu.selectUsuarioByLogin(loginEmisor);
			Usuario receptor = iu.selectUsuarioByLogin(loginReceptor);

			if (ici.insertPeticion(emisor, receptor)) {

				result = true;
			}

		}
		return result;

	}

	public List<Usuario> getPeticiones(String login) {
		IClubInversionDAO ici = new JBDCClubInversionesDAO();
		List<Usuario> m = new LinkedList<Usuario>();
		m = ici.selectPeticionesUsuario(login);
		return m;
	}

	public void eliminarPeticion(String emisor, String receptor) {
		IClubInversionDAO ici = new JBDCClubInversionesDAO();
		ici.deletePeticion(emisor, receptor);
	}

	public List<Usuario> getPeticionesEnviadas(String login) {
		IClubInversionDAO ici = new JBDCClubInversionesDAO();
		List<Usuario> m = new LinkedList<Usuario>();
		m = ici.selectPeticionesEnviadas(login);
		return m;
	}

}
